package com.example.spider.proxy.core.tester;

import cn.hutool.core.util.ReUtil;
import com.example.spider.proxy.core.ProxyInfo;

import java.util.List;

import static com.example.spider.proxy.core.tester.TestConstant.DEFAULT_TEST_SUCCESS_CODE;

/**
 * 测匿名度 + 位置 + 运营商 + 响应速度
 */
public class UpdateLocationTestCallBack extends AbstractTestCallBack {

    public UpdateLocationTestCallBack() {
        super("http://mip.chinaz.com");
    }

    @Override
    public String getAimUrl(ProxyInfo proxyInfo) {
        return "http://mip.chinaz.com/?query=" + proxyInfo.getIp();
    }

    @Override
    public boolean onResponse(ProxyInfo proxyInfo, int responseCode, String responseStr, long costTime) {
        // 获取代理相关信息
        List<String> matchResult = ReUtil.findAllGroup1("<td class=\"z-tc\">(.*?)</td>", responseStr);
        //if(StrUtil.isAllNotBlank(proxyInfo.getAnonymity(), proxyInfo.getLocation())){
        if (matchResult.size() != 3) {
            throw new RuntimeException("PARSE FAIL");
        }
        String ip = matchResult.get(0).trim();
        // 计算匿名度
        if (LOCAL_PUBLIC_IP.equals(ip)) {
            // 暴露自己ip，建议不要用
            proxyInfo.setAnonymity("透明");
        } else if (proxyInfo.getIp().equals(ip)) {
            // 暴露代理服务器ip，比较容易被封/针对
            proxyInfo.setAnonymity("普通匿名");
        } else {
            // 一般是每次请求随机 ip，高匿名
            proxyInfo.setAnonymity("高匿名");
        }

        // 位置
        String[] locationAndOperator = matchResult.get(2).split("<br")[0].trim().split(" ");
        proxyInfo.setLocation(locationAndOperator[0]);
        // 运营商
        proxyInfo.setOperator(locationAndOperator[1]);

        // 计算本次请求得分
        proxyInfo.success(costTime);
        return responseCode == DEFAULT_TEST_SUCCESS_CODE;
    }

}